package com.buba.service;//package com.buba.service;

import com.alibaba.fastjson.JSONObject;
import com.buba.utils.FileUtil;
import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import entity.File;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.Date;
import java.util.UUID;

/**
 * @创建人: 胡亮
 * @创建时间: 2023年03月02日 上午 11:08
 * @描述:图片上传Service层
 */
@Service
public class QiniuService {
    private static final Logger logger = LoggerFactory.getLogger(QiniuService.class);

    // 设置好账号的ACCESS_KEY和SECRET_KEY
    String ACCESS_KEY = "Zgp8eHMhasLT4oVyEKjV3V2jk3ZFak8ljhPLtGMq";
    String SECRET_KEY = "xBzS52PTeQb12c1o1athDHRNWTev8FPQqLdkUP-C";
    // 要上传的空间
    String bucketname = "heq";

    // 密钥配置
    Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
    // 构造一个带指定Zone对象的配置类,不同的七云牛存储区域调用不同的zone
    Configuration cfg = new Configuration(Zone.autoZone());
    // ...其他参数参考类注释
    UploadManager uploadManager = new UploadManager(cfg);

    // 测试域名，只有30天有效期
    private static String QINIU_IMAGE_DOMAIN = "http://c.svner.cn/";

    // 简单上传，使用默认策略，只需要设置上传的空间名就可以了
    public String getUpToken() {
        return auth.uploadToken(bucketname);
    }
    public File saveImage(MultipartFile file) throws IOException {
        //创建返回对象
        File picture=new File();
        //获取图片没加密名称
        String fileName = file.getOriginalFilename();
        //将图片没加密名称存入返回对象
        picture.setFileName(fileName);

        try {
            int dotPos = file.getOriginalFilename().lastIndexOf(".");
            if (dotPos < 0) {
                return null;
            }
            String fileExt = file.getOriginalFilename().substring(dotPos + 1).toLowerCase();
            // 判断是否是合法的文件后缀
            if (!FileUtil.isFileAllowed(fileExt)) {
                return null;
            }
            //将图片后缀存入返回对象
            picture.setFileType("."+fileExt);
            String fileUuidName = UUID.randomUUID().toString().replaceAll("-", "") + "." + fileExt;
            //将图片加密名称存入返回对象
            picture.setFileUuidName(fileUuidName);
            // 调用put方法上传
            Response res = uploadManager.put(file.getBytes(), fileUuidName, getUpToken());
            // 打印返回的信息
            if (res.isOK() && res.isJson()) {
                //将图片存储路径存入返回对象
                picture.setFilePath(QINIU_IMAGE_DOMAIN + JSONObject.parseObject(res.bodyString()).get("key"));
                //将图片大小存入返回对象
                Long size = file.getSize();
                int fileSize = size.intValue();
                picture.setFileSize(fileSize);
                //将图片状态存入返回对象
                picture.setDelFlag(0);
                // 返回对象
                return picture;
            } else {
                logger.error("七牛异常:" + res.bodyString());
                return null;
            }
        } catch (QiniuException e) {
            // 请求失败时打印的异常的信息
            logger.error("七牛异常:" + e.getMessage());
            return null;
        }
    }

}